package com.example.rabbit.config;

import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;

import javax.annotation.PostConstruct;

/**
 * 这一个类是为了 对比rabbitMQ确认回调以及回退回调两种写法而存在
 * 因此两个类上的 @Component只能同时有一个存在，效果完全相同
 *

 * - 这个类 与 SeniorConfirmCallback 使用的是两种不同的写法，一个是通过属性设置，一个是通过是实现接口
 *
 * 这个类作为测试 消息回退 和交换机备份优化及时的测试使用步骤：
 *
 * 1. SeniorConfirmCallback 上的 @Component注解与 这个类上的 @Component只能同时有一个存在
 * 2. SeniorConfirmConfig 中 CONFIRM_EXCHANGE 交换机的定义，需要设置备份交换机的指向。（注意交换机一旦创建就不能修改了，如果要改参数，只能重新了重新创建）
 * @Author ifredomvip@gmail.com
 * @Date 2022/8/15 15:03
 * @Version 1.0.0
 * @Description
 **/

//@Component
public class SeniorTestPriorityLevel {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @PostConstruct
    public void init(){
        // 注入
        System.out.println("启动============设置 确认回调");
        rabbitTemplate.setConfirmCallback((CorrelationData correlationData, boolean ack, String cause) -> {
            System.out.println("测试交换机回调与交换机器备份 ，确认回调");
        });
        rabbitTemplate.setReturnCallback((Message msg, int replyCode, String replyText, String exchange, String routingKey) -> {
            System.out.println("测试交换机回调与交换机器备份 ，失败回退回调");
        });
    }
}
